In early personal computing systems, application program had to be programmed with knowledge of various computing devices in order for the application to use such devices. For example, in order to print to a particular printer, a word processing program had to know how to print to the printer, and generally supplied a driver for each supported printer. Alternatively, a printer would supply drivers with it for the most popular programs. The user had to configure each program to inform that program as to which printer was connected to the personal computer.
Contemporary operating systems such as Microsoft Windows® provided developers with a way to interface applications with such devices regardless of the specific device driver needs and requirements. For example, with the Microsoft Windows® operating system a user or the device tells the operating system which printer (or printers) is connected, after which any application is able to communicate with the printer driver via the operating system. As a result, to accomplish printing, application programs generally only need to deal with a set of standardized printing functions provided by the operating system. The enormous benefits of such an abstraction cannot be understated, e.g., this abstraction enables any one of thousands of software programs to interact with any one of thousands of printers and/or other devices, without the program having to know (or otherwise supply) the details about the printer in advance.
Microsoft Corporation's .NET technology provides a somewhat similar type of abstraction regarding a user's or company's data. In general, with .NET technology, any .NET-capable program on any device can interact with a user's data via centralized schema-based services. Because of the schematization, the programs do not need specific knowledge about the details of that data, e.g., which used to be stored in proprietary file formats, but rather only needs to be able to deal with (read and write) data formatted according to one or more of the schemas.
With .NET technology, a user's (or other entity's) identity controls access to the centrally-maintained data, e.g., a user may use a .NET Inbox service keep his or her electronic mail data centrally stored (e.g., on the Internet or an intranet), and then access that data via the .NET inbox service, at any time, from any device capable of connecting to the Internet or an intranet and having a program capable of interacting with the .NET Inbox service. The user's identity is used to securely match the user with the appropriate data. Users can also controllably allow access to data by other users, e.g., a user can selectively make certain business contact information available to business associates, make personal contact information available to friends, and so on, based on the others' identities.
While .NET thus provides tremendous data-based benefits to users, companies and other entities, the centralized service and centralized data are not particularly concerned with how a user uses various devices and those devices' resources. For example, devices such as a personal computer and pocket personal computer have, for quite some time, been able to directly synchronize with one another. To an extent, .NET technology is another way to keep such data synchronized, although indirectly, without needing specialized and proprietary synchronization programs.
However, even with .NET, a user cannot easily use one device to access the resources of another device, such as to use the computing power, storage, bandwidth, input and output mechanisms, programs and/or other resources of one device on behalf of another device, e.g., to perform a complex or better-suited task on the more powerful device. What is needed is a common, consistent way to remotely discover and expose computing resources of various computing devices to one another for cross-resource usage.